home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2007 December / PCWKCD1207B.iso / Blogowanie poza sfera / Flock 0.9.1.3 stable / flock-0.9.1.3.en-US.win32.exe / flock / chrome / browser.jar / content / browser / bookmarks / bookmarksProperties.js < prev    next >
Text File  |  2007-08-15  |  13KB  |  353 lines

  1. //@line 37 "/cygdrive/K/tinderbuild/src/flock/mozilla/browser/components/bookmarks/content/bookmarksProperties.js"
  2.  
  3. // This is the RDF Resource we're dealing with.
  4. var gResource;
  5. // This is the set of fields that are visible in the window.
  6. var gFields;
  7. // ...and this is a parallel array that contains the RDF properties
  8. // that they are associated with.
  9. var gProperties;
  10. var gSelection;
  11. var gListener;
  12. var gPref_service;
  13. function showDescription()
  14. {
  15.   initServices();
  16.   initBMService();
  17.   gSelection = window.arguments[0];
  18.   gListener = window.arguments[2];
  19.   gResource = RDF.GetResource(gSelection.item[0].Value);
  20.  
  21.   if (gResource == BMSVC.getBookmarksToolbarFolder()) {
  22.     var description = BookmarksUtils.getLocaleString("description_PersonalToolbarFolder");
  23.     var box = document.getElementById("description-box");
  24.     box.hidden = false;
  25.     var textNode = document.createTextNode(description);
  26.     document.getElementById("bookmarkDescription").appendChild(textNode);
  27.   }
  28. }
  29.  
  30. function Init()
  31. {
  32.   // assume the user will press cancel (only used when creating new resources)
  33.   window.arguments[1].ok = false;
  34.   // This is the set of fields that are visible in the window.
  35.   gFields     = ["url", "name", "shortcut", "description", "tags", "webpanel", "feedurl"];
  36.   gPref_service = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);
  37.   // ...and this is a parallel array that contains the RDF properties
  38.   // that they are associated with.
  39.   gProperties = [RDF.GetResource(gNC_NS+"URL"),
  40.                  RDF.GetResource(gNC_NS+"Name"),
  41.                  RDF.GetResource(gNC_NS+"ShortcutURL"),
  42.                  RDF.GetResource(gNC_NS+"Description"),
  43.                  RDF.GetResource(gFL_NS+"tags"),
  44.                  RDF.GetResource(gNC_NS+"WebPanel"),
  45.                  RDF.GetResource(gNC_NS+"FeedURL"),
  46.                  RDF.GetResource(gNC_NS+"GeneratedTitle")];
  47.                  
  48.    var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);
  49.    if(!prefs.getBoolPref("flock.favorites.showKeyword"))
  50.     {
  51.         $("shortcutrow").hidden = true;
  52.     }
  53.  
  54.   var x;
  55.   // Initialize the properties panel by copying the values from the
  56.   // RDF graph into the fields on screen.
  57.  
  58.   for (var i=0; i<gFields.length; ++i) {
  59.     var field = document.getElementById(gFields[i]);
  60.     var value = BMDS.GetTarget(gResource, gProperties[i], true);
  61.     
  62.     if (value)
  63.       value = value.QueryInterface(Components.interfaces.nsIRDFLiteral).Value;
  64.  
  65.     if (gFields[i] == "webpanel")
  66.       field.checked = (value != undefined);
  67.     else if (value) //make sure were aren't stuffing null into any fields
  68.       field.value = value;
  69.   }
  70.   // loadDataForSavedOverlay(gResource, BMDS);
  71.   //if (MicrosummaryPicker.enabled)
  72.   //  MicrosummaryPicker.init();
  73.  
  74.   var nameNode = document.getElementById("name");
  75.   document.title = document.title.replace(/\*\*bm_title\*\*/gi, nameNode.value);
  76.  
  77.   // if its a container, disable some things
  78.   var isContainerFlag = RDFCU.IsContainer(BMDS, gResource);
  79.   if (!isContainerFlag) {
  80.     // XXX To do: the "RDFCU.IsContainer" call above only works for RDF sequences;
  81.     //            if its not a RDF sequence, we should to more checking to see if
  82.     //            the item in question is really a container of not.  A good example
  83.     //            of this is the "File System" container.
  84.   }
  85.  
  86.   var isLivemark = BookmarksUtils.resolveType(gResource) == "Livemark";
  87.   var isSeparator = BookmarksUtils.resolveType(gResource) == "BookmarkSeparator";
  88.  
  89.   if (isContainerFlag || isSeparator) {
  90.     // Hide the "Load in sidebar" checkbox unless it's a bookmark.
  91.     var webpanelCheckbox = document.getElementById("webpanel");
  92.     webpanelCheckbox.hidden = true;
  93.  
  94.     // If it is a folder, it has no URL or Keyword and does not need to be saved online
  95.     document.getElementById("locationrow").setAttribute("hidden", "true");
  96.     document.getElementById("shareArea").setAttribute("hidden", "true");
  97.     document.getElementById("tagsrow").setAttribute("hidden", "true");
  98.     document.getElementById("AdvancedFeatures").setAttribute("hidden", "true");
  99.     document.documentElement.getButton("extra1").setAttribute("hidden", "true");
  100.     if (isSeparator) {
  101.       document.getElementById("descriptionrow").setAttribute("hidden", "true");
  102.     }
  103.   }
  104.   else {
  105.     loadShareArea($('bmServices-box'), document.getElementById("url").value, false);
  106.   }
  107.  
  108.   if (isLivemark) {
  109.     document.getElementById("locationrow").hidden = true;
  110.     document.getElementById("shortcutrow").hidden = true;
  111.     document.getElementById("createlocalcheck").hidden = true;
  112.     document.getElementById("createlocalcheck").checked = true;
  113.     document.getElementById("shareArea").hidden = true;
  114.     document.getElementById("publishLocations").hidden = true;
  115.     document.documentElement.getButton("extra1").setAttribute("hidden", "true");
  116.   } else {
  117.     document.getElementById("feedurlrow").hidden = true;
  118.   }
  119.  
  120.   var prefsService = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);
  121.   $("showDialog").checked = prefsService.getBoolPref("flock.favorites.starShowProperties");
  122.   sizeToContent();
  123.   
  124.   // set initial focus
  125.   nameNode.focus();
  126.   nameNode.select();
  127.   showParentFolder(gResource);
  128. }
  129. function checkForBookmarkFolderChange()
  130. {
  131.   var coop = Components.classes['@flock.com/singleton;1'].getService(Components.interfaces.flockISingleton)
  132.       .getSingleton('chrome://browser/content/flock/common/load-faves-coop.js')
  133.       .wrappedJSObject;
  134.   var c_oldBM = BookmarksUtils.getflockUtilsObject().BookmarksShareUtils
  135.                           .getCoopObject(BMDS, gResource);
  136.   var isLivemark = BookmarksUtils.resolveType(gResource) == "Livemark";
  137.  
  138.   var mainParent = null;
  139.   var candidates = c_oldBM.getParents();
  140.   while (candidates.length && !mainParent) {
  141.     var candidate = candidates.pop();
  142.     if (candidate instanceof coop.Folder) // Ignore what's not a folder
  143.       mainParent = candidate;
  144.   }
  145.   if (mainParent && (mainParent.id() !=  $("select-menu").selectedItem.id)) {
  146.     mainParent.children.remove(c_oldBM);
  147.     var newParent = coop.get($("select-menu").selectedItem.id);
  148.     newParent.children.add(c_oldBM);
  149.   }
  150.   BookmarksUtils.flushDataSource();
  151.   BookmarksUtils.refreshSearch();
  152. }
  153. function UpdateBookmark(aUrl)
  154. {
  155.   //TODO: IPAUL need to remove once known not needed
  156.   var coop = Components.classes['@flock.com/singleton;1'].getService(Components.interfaces.flockISingleton)
  157.       .getSingleton('chrome://browser/content/flock/common/load-faves-coop.js')
  158.       .wrappedJSObject;
  159.   // When changing the URL of a bookmark, we are actually changing the URN of
  160.   // that RDF node.  So we need to  re-create the node and transfer all arcs
  161.   // from the old one to the new one.
  162.   var c_oldBM = BookmarksUtils.getflockUtilsObject().BookmarksShareUtils
  163.                               .getCoopObject(BMDS, gResource);
  164.                 
  165.   // Is this a regular bookmark or a livemark?
  166.   var isLivemark = BookmarksUtils.resolveType(gResource) == "Livemark";
  167.  
  168.   if (isLivemark) {
  169.     var mainParent = c_oldBM.getParents()[0];
  170.   } else {
  171.     var mainParent = c_oldBM.getParent();
  172.   }
  173.  
  174.   // Create the new node under the same parent folder as the old one
  175.   var newBM;
  176.   if (isLivemark) {
  177.     newBM = BMSVC.createLivemark(c_oldBM.name, aUrl, aUrl, "");
  178.   } else {
  179.     newBM = BMDS.addBookmarkToFolder(mainParent.id(), "", aUrl, "", "", "", null, "");
  180.   }
  181.   var c_newBM = BookmarksUtils.getflockUtilsObject().BookmarksShareUtils
  182.                               .getCoopObject(BMDS, newBM);
  183.   if (isLivemark) { mainParent.children.addOnce(c_newBM); }
  184.  
  185.   // If the old bookmark had multiple parents, make sure they all reference the
  186.   // new bookmark
  187.   var parents = c_oldBM.getParents();
  188.   for (var p in parents) {
  189.     if (parents[p].id() != mainParent.id()) {
  190.       parents[p].children.remove(c_oldBM);
  191.       parents[p].children.add(c_newBM);
  192.     }
  193.   }
  194.  
  195.   // Now transfer all the bookmark properties
  196.   var bmProps = [ "URL", "capItems", "count", "datevalue", "description",
  197.                   "favicon", "flockType", "hasUnseenItems", "isIndexable",
  198.                   "isPollable", "isTransient", "lastItemDate", "lastQuery",
  199.                   "lastRefresh", "maxItems", "name", "rdftype", "tags",
  200.                   "refreshInterval", "refreshing", "service", "thumbnail",
  201.                   "unseen", "unseenItems", "notify", "state", "FeedURL" ];
  202.   for (var p in bmProps) {
  203.     c_newBM[p] = c_oldBM[p];
  204.   }
  205.  
  206.   // Destroy the old node, and use the new node from now on
  207.   gResource = RDF.GetResource(c_newBM.id());
  208.   BookmarksUtils.removeSelection("delete", gSelection);  
  209.   c_oldBM.destroy();
  210.   window.arguments[1].gResource = gResource;
  211. }
  212.  
  213. function Commit()
  214. {
  215.   var changed = false;
  216.  
  217.   var isLivemark = BookmarksUtils.resolveType(gResource) == "Livemark";
  218.   var publishNeeded = false;
  219.   if (document.getElementById("shareArea").getAttribute("hidden") != "true") {
  220.     var bookmark = new Bookmark();
  221.     bookmark.URL = $("url").value;
  222.     bookmark.name = $("name").value;
  223.     bookmark.tags = $("tags").value;
  224.     bookmark.description = $("description").value;
  225.     publishNeeded = bgPublishAll([bookmark], $("bmServices-box"), gListener);
  226.   }
  227.   setDoEverytime();
  228.  
  229.   for (var i=0; i<gFields.length; ++i) {
  230.     var field = document.getElementById(gFields[i]);
  231.  
  232.     if (! field)
  233.       continue;
  234.  
  235.     // Get the new value as a literal, using 'null' if the value is empty.
  236.     var newValue = field.value;
  237.  
  238.     if (gFields[i] == "webpanel")
  239.       newValue = field.checked ? "true" : undefined;
  240.  
  241.     var oldValue = BMDS.GetTarget(gResource, gProperties[i], true);
  242.  
  243.     if (oldValue)
  244.       oldValue = oldValue.QueryInterface(Components.interfaces.nsIRDFLiteral);
  245.  
  246.     if (newValue && gFields[i] == "shortcut") {
  247.       // shortcuts are always lowercased internally
  248.       newValue = newValue.toLowerCase();
  249.       // strip trailing and leading whitespace
  250.       newValue = newValue.replace(/(^\s+|\s+$)/g, '');
  251.     }
  252.     else if (newValue && gFields[i] == "url") {
  253.       if (newValue.indexOf(":") < 0)
  254.         // we're dealing with the URL attribute;
  255.         // if a scheme isn't specified, use "http://"
  256.         newValue = "http://" + newValue;
  257.     }
  258.  
  259.     if (newValue)
  260.       newValue = RDF.GetLiteral(newValue);
  261.  
  262.     changed |= updateAttribute(gProperties[i], oldValue, newValue);
  263.     if (gFields[i] == "url" && oldValue && oldValue.Value != newValue.Value) {
  264.       // if the URL was updated, clear out the favicon
  265.       //UpdateBookmark(newValue.Value);
  266.       var icon = BMDS.GetTarget(gResource, RDF.GetResource(gNC_NS+"Icon"), true);
  267.       if (icon) BMDS.Unassert(gResource, RDF.GetResource(gNC_NS+"Icon"), icon);
  268.     }
  269.     if (isLivemark && gFields[i] == "feedurl") {
  270.       var oldVal = (oldValue) ? oldValue.Value : "";
  271.      
  272.       if (oldVal != newValue.Value) {
  273.         UpdateBookmark(newValue.Value);
  274.       }
  275.     }
  276.   }
  277.   // was it asked by the user publish for the first time?
  278.   window.arguments[1].publishedOnline = didUserAskToPublish($("bmServices-box"));
  279.   if (changed) {
  280.     var lastModRes = RDF.GetResource(gWEB_NS+"LastModifiedDate");
  281.     oldValue = BMDS.GetTarget(gResource, lastModRes, true);
  282.     if (oldValue) {
  283.       oldValue = oldValue.QueryInterface(Components.interfaces.nsIRDFDate);
  284.     }
  285.     newValue = RDF.GetDateLiteral ((new Date()).getTime() * 1000);
  286.     updateAttribute(lastModRes, oldValue, newValue);
  287.     // user did not ask to publish for first time however there was changes and
  288.     // that needed to be?
  289.     if (!window.arguments[1].publishedOnline) {
  290.       window.arguments[1].publishedOnline = publishNeeded;
  291.     }
  292.   }
  293.  
  294.   // Publish/remove to/from bm sharing services
  295.   
  296.   var obs = Components.classes["@mozilla.org/observer-service;1"]
  297.                       .getService(Components.interfaces.nsIObserverService);
  298.   obs.notifyObservers(window,'favorites', 'favorites:update');
  299.   
  300.   window.arguments[1].ok = true;
  301.  
  302.   if ($("createlocalcheck").checked) {
  303.     checkForBookmarkFolderChange();
  304.   }
  305.   else {
  306.     var c_oldBM = BookmarksUtils.getflockUtilsObject().BookmarksShareUtils
  307.                                 .getCoopObject(BMDS, gResource);
  308.     c_oldBM.destroy();
  309.       
  310.     window.close();
  311.     return true;
  312.   }
  313.   // Publish to online service (if needed, and if we're not working on a folder)
  314.   window.close();
  315.   return true;
  316. }
  317.  
  318. function Cancel()
  319. {
  320.   // Destroy the microsummary picker controller to prevent memory leaks,
  321.   // catching exceptions so we don't prevent the dialog from closing.
  322.   //try {
  323.   //  if (MicrosummaryPicker.enabled)
  324.   //    MicrosummaryPicker.destroy();
  325.   //}
  326.   //catch(e) {
  327.   //  Components.utils.reportError(e);
  328.   //}
  329.  
  330.   return true;
  331. }
  332.  
  333. function updateAttribute(aProperty, aOldValue, aNewValue)
  334. {
  335.   if ((aOldValue || aNewValue) && aOldValue != aNewValue) {
  336.     if (aOldValue && !aNewValue)
  337.       BMDS.Unassert(gResource, aProperty, aOldValue);
  338.     else if (!aOldValue && aNewValue)
  339.       BMDS.Assert(gResource, aProperty, aNewValue, true);
  340.     else /* if (aOldValue && aNewValue) */
  341.       BMDS.Change(gResource, aProperty, aOldValue, aNewValue);
  342.     return true;
  343.   }
  344.   return false;
  345. }
  346.  
  347. function onToggleShowDialog()
  348. {
  349.   var prefsService = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);
  350.   prefsService.setBoolPref("flock.favorites.starShowProperties", $("showDialog").checked);
  351. }
  352.  
  353.